/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;

import fisica.CapaFisica;
import fisica.NoFarmacologicoFisica;
import hibernate.objeto.NoFarmacologico;
import hibernate.objeto.TratamientoMedicamentoso;
import java.util.Date;
import java.util.Vector;
import presentacion.CapaPresentacion;

/**
 *
 * @author Gonzalo
 */
public class NoFarmacologicoLogica extends CapaLogica {

    /**
     * Crea y persiste los objetos TratamientoMedicamentoso No Farmacologico.
     *
     * @param datosNoFarmacologico Los datos correspondientes al apartado
     * Tratamiento Medicamentoso No Farmacologico
     * @param tratamientoMedicamentoso El tratamiento medicamentoso al cual se
     * asocia
     * @return true si se agregó correctamente, false en caso contrario
     */
    public static boolean agregarTratamientoMedicamentosoNoFarmacologico(Object[][]
            datosNoFarmacologico, TratamientoMedicamentoso tratamientoMedicamentoso) {
        //Crea el objeto NoFarmacologico
        NoFarmacologico noFarmacologico;

        int cantidadObjetosACrear = datosNoFarmacologico.length;
        int objetosCreados = 0;

        for (int i = 0; i < cantidadObjetosACrear; i++) {
            noFarmacologico = crearObjetoNoFarmacologico(datosNoFarmacologico[i]);
            
            //Tratamiento
            noFarmacologico.setTratamientoMedicamentoso(tratamientoMedicamentoso);

            if (!CapaFisica.guardarOActualizarObjeto(noFarmacologico)) {
                return false;
            } else {
                objetosCreados = objetosCreados + 1;
            }
        }

        if (objetosCreados == cantidadObjetosACrear) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Crea un objeto NoFarmacologico con los datos pasados por parámetro.
     *
     * @param datosNoFarmacologico Los datos particulares del objeto
     * @return El objeto NoFarmacologico recien creado
     */
    private static NoFarmacologico crearObjetoNoFarmacologico(
            Object[] datosNoFarmacologico) {

        NoFarmacologico noFarmacologico = new NoFarmacologico();

        noFarmacologico.setHoraNoFarmacologico(
                datosNoFarmacologico[
                NO_FARMACOLOGICO_HORA].toString());

        noFarmacologico.setFechaNoFarmacologico(
                (Date) datosNoFarmacologico[
                NO_FARMACOLOGICO_FECHA]);

        noFarmacologico.setDescripcionNoFarmacologico(
                datosNoFarmacologico[
                NO_FARMACOLOGICO_DESCRIPCION].toString());

        noFarmacologico.setEstadoNoFarmacologico(
                datosNoFarmacologico[
                NO_FARMACOLOGICO_ESTADO].toString());

        return noFarmacologico;
    }

    /**
     * Finaliza el tratamiento no farmacologico.
     *
     * @param noFarmacologico El tratamiento no farmacologico a finalizar
     * @return El objeto NoFarmacologico si se pudo finalizar, null en caso
     * contrario
     */
    public static NoFarmacologico finalizarNoFarmacologico(
            NoFarmacologico noFarmacologico) {
        //Setea el no medicamento como No activo
        noFarmacologico.setEstadoNoFarmacologico("No activo");

        if (CapaFisica.guardarOActualizarObjeto(noFarmacologico)) {
            return noFarmacologico;
        } else {
            return null;
        }
    }

    /**
     * Retorna el objeto NoFarmacologico según el ID.
     *
     * @param idNoFarmacologico El id del objeto NoFarmacologico
     * @return El objeto NoFarmacologico consultado, null si no existe
     */
    public static NoFarmacologico getNoFarmacologicoPorId(int idNoFarmacologico) {
        return NoFarmacologicoFisica.getNoFarmacologicoPorId(idNoFarmacologico);
    }

    /**
     * Retorna el vector de objetos NoFarmacologico según el paciente.
     *
     * @param idPaciente El paciente en cuestión
     * @return El vector de objetos NoFarmacologico consultado, null si no existe
     */
    public static Vector<NoFarmacologico> getVectorNoFarmacologicoPorIdPaciente(
            int idPaciente) {
        return NoFarmacologicoFisica.getVectorNoFarmacologicoPorPaciente(
                idPaciente);
    }
    
    /**
     * Retorna el vector de objetos NoFarmacologicos según el id del tratamiento.
     *
     * @param idTratamiento El id del tratamiento asociado
     * @return El vector de objetos NoFarmacologico consultado, null si no existe
     */
    public static Vector<NoFarmacologico>
            getVectorNoFarmacologicoPorIdTratamientoMedicamentoso(int idTratamiento) {
        return NoFarmacologicoFisica.
                getVectorNoFarmacologicoPorIdTratamientoMedicamentoso(idTratamiento);
    }

    /**
     * Retorna el vector de objetos NoFarmacologico según el paciente filtrando
     * el estado
     *
     * @param vectorNoFarmacologico El vector de objetos a filtrar
     * @param estado El estado del objeto Farmacologico
     * @return El vector de objetos Farmacologico consultado, null si no existe
     */
    public static Vector<NoFarmacologico> filtrarVectorNoFarmacologicoPorEstado(
            Vector<NoFarmacologico> vectorNoFarmacologico, String estado) {
        Vector<NoFarmacologico> vectorRetorno = new Vector<NoFarmacologico>();

        if (vectorNoFarmacologico != null) {
            for (int i = 0; i < vectorNoFarmacologico.size(); i++) {
                if (vectorNoFarmacologico.get(i).
                        getEstadoNoFarmacologico().equalsIgnoreCase(estado)) {
                    vectorRetorno.add(vectorNoFarmacologico.get(i));
                }
            }
        }

        if (vectorRetorno.size() > 0) {
            return vectorRetorno;
        } else {
            return null;
        }
    }

    /**
     * Retorna todo el objeto NoFarmacologico en string.
     *
     * @param evolucion El objeto a escribir
     */
    public static String getNoFarmacologicoString(NoFarmacologico noFarmacologico) {
        String noFarmacologicoString =
                "idNoFarmacologico: " +
                noFarmacologico.getIdNoFarmacologico() + "\n" +
                "horaNoFarmacologico: " +
                noFarmacologico.getHoraNoFarmacologico() + "\n" +
                "fechaNoFarmacologico: " +
                noFarmacologico.getFechaNoFarmacologico() + "\n" +
                "descripcionNoFarmacologico: " +
                noFarmacologico.getDescripcionNoFarmacologico() + "\n" +
                "estadoNoFarmacologico: " +
                noFarmacologico.getEstadoNoFarmacologico() + "\n";

        return noFarmacologicoString;
    }

    /**
     * Retorna el texto HTML correspondiente a la descripcion del no farmacológico.
     *
     * @param noFarmacologico El objeto
     * @return El String que contiene el HTML
     */
    public static String getNoFarmacologicoHTML(NoFarmacologico noFarmacologico) {
        String noFarmacologicoHTML = "";
        
        if (noFarmacologico != null) {
            noFarmacologicoHTML =
                    "<font size=\"3\" face=\"arial\" color=\"blue\">No FARMACOLÓGICO</font><br><br> "
                    + "<hr /><font size=\"3\" face=\"arial\" color=\"blue\">Fecha: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    CapaPresentacion.imprimirFecha(noFarmacologico.getFechaNoFarmacologico()) + " - " +
                    noFarmacologico.getHoraNoFarmacologico() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"blue\">Recetó: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    noFarmacologico.getTratamientoMedicamentoso().getEvolucion().getApellidoProfesionalEvolucion() + ", " +
                    noFarmacologico.getTratamientoMedicamentoso().getEvolucion().getNombreProfesionalEvolucion() + "</font><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"blue\">Estado: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    noFarmacologico.getEstadoNoFarmacologico() + "</font><br><hr /><br>"
                    + "<font size=\"3\" face=\"arial\" color=\"blue\">Descripción</font><br>"
                    + "<font size=\"3\" face=\"arial\">" +
                    noFarmacologico.getDescripcionNoFarmacologico() + "</font><br><br><";
        } else {
            noFarmacologicoHTML = "<font size=\"3\" face=\"arial\" color=\"blue\">FARMACOLÓGICO</font><br><br> " +
                    "<hr /><font size=\"3\" face=\"arial\">No posee</font><br></font><hr />";
        }

        return noFarmacologicoHTML;
    }

}
